-- 第一题
--3、创建一个名为“T3”的触发器，当向sc表中插入或更新一条记录的课程号时，
-- 新记录的课程号必须在course表中存在，否则提示课程号不正确。
create trigger T3
on sc
after insert,update
as 
  begin
       if not exists (select 1 from inserted 
	   where inserted.cno in (select cno from course) )
	   begin 
	       print('课程号不正确')
		   rollback transaction
	   end      
  end 

  insert into sc  values(201215122,110,200)
   insert into sc  values(201215122,6,200)


-- 第二题
-- 1创建一个名为myview的视图，视图中包含学生的学号，姓名，选修课程号和成绩。
create view myview
as 
 select s.sno,sname,cno,grade
 from student s
 inner join sc on sc.sno=s.sno;
 -- 2 在该视图上执行insert语句:
insert into myview
values ('201215121','李勇','5',88)

-- 3 要求在该视图上创建一个instead of触发器，实现对该视图中数据的更新。
create trigger tr_myview
on myview
instead of insert
as 
	begin
		declare @sno char(10),@sname char(30),
		@cno char (10),@grade int 
	    select @sno=sno,@sname=sname,@cno=cno,
		@grade=grade from inserted
		if @sno not in (select sno from student)
		   begin
	 			insert into student (sno,sname)
				values (@sno,@sname)
				insert into sc
				values (@sno,@cno,@grade)
	     	end
		else
			begin
				insert into sc
				values (@sno,@cno,@grade)
			end 
	end 


select * from sc;



-- 第三题

--、在student表中添加一列：学分，int。创建一个名为“T4”的触发器，当向sc表中插入一条记录的成绩时，
--如果成绩大于等于60分，则student表的学分自动加上该门课程的学分。
create trigger T4
on sc
after insert 
as 
	begin 
	 declare @grade int,@sno char(10),@cno char(10),@credit int 
	 select @grade= grade,@sno=sno ,@cno=cno  from inserted
	 select @credit=ccredit from course where cno=@cno
	 if(@grade>=60)
		begin
	        update student 
			set xuefen=xuefen+@credit
			where sno=@sno 
		end
	end 

insert into sc 
values ('201215123',6,78)


DROP trigger T4